/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package de.hsos.samcomm.forumManagement.entity;

import de.hsos.samcomm.userManagement.entity.Member;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;

/**
 * Entitaet eines Forums.
 *
 * @author felix
 */
@Entity(name="forum")
public class Forum implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private String OID;
    private String title;

    @ManyToMany(mappedBy = "subscriptions")
    private List<Member> members = new ArrayList<>();

    @OneToMany(mappedBy = "belongsTo", cascade=CascadeType.ALL, fetch= FetchType.EAGER)
    private List<Entry> entries = new ArrayList<>();

    /**
     * Default Konstruktor.
     */
    public Forum() {}

    /**
     * Ueberladener Konstruktor.
     * 
     * @param title
     */
    public Forum(String title) {
        this.title = title;
    }

    /**
     * Get-Methode fuer die ObjektID.
     *
     * @return the OID
     */
    public String getOID() {
        return OID;
    }

    /**
     * Set-Methode fuer die ObjektID.
     *
     * @param OID
     */
    public void setOID(String OID) {
        this.OID = OID;
    }

    /**
     * Get-Methode fuer den Titel.
     *
     * @return title
     */
    public String getTitle() {
        return title;
    }

    /**
     * Set-Methode fuer den Titel.
     *
     * @param title
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * Get-Methode fuer die eingetragenen Benutzer.
     *
     * @return members
     */
    public List<Member> getMembers() {
        return (List<Member>)(List<?>)members;
    }

    /**
     * Set-Methode fuer die eingetragenen Benutzer.
     *
     * @param members
     */
    public void setMembers(List<Member> members) {
        this.members = (List<Member>)(List<?>)members;
    }

    /**
     * Fuegt diesem Forum den uebergebenen Eintrag hinzu.
     *
     * @param e
     */
    public void addEntry(Entry e) {
        Entry tmp = (Entry) e;
        this.entries.add(tmp);
    }

    /**
     * Get-Methode fuer die Eintraege.
     *
     * @return entries;
     */
    public List<Entry> getEntries() {
        return entries;
    }

    /**
     * Set-Methode fuer die Eintraege.
     *
     * @param entries
     */
    public void setEntries(List<Entry> entries) {
        this.entries = entries;
    }

    /**
     * Liefert die Anzahl der eingetragenen Benutzer.
     *
     * @return Anzahl eingetragener Nutzer
     */
    public int getMemberCount() {
        return members.size();
    }

    /**
     * Liefert die Anzahl der Eintraege.
     *
     * @return Anzahl der Eintraege
     */
    public int getEntryCount() {
        return entries.size();
    }

    /**
     * Fuegt diesem Forum den uebergenen Benutzer hinzu.
     *
     * @param m
     */
    public void addMember(Member m) {
        this.members.add(m);
    }

    /**
     * Ueberschriebene toString-Methode. Liefert den Titel des Forums.
     *
     * @return title
     */
    @Override
    public String toString() {
        return title;
    }
}
